#include "loadphotoncount.h"
#include <QMessageBox>
#include <QDialogButtonBox>

#include <QFile>
#include <QTextStream>
#include <QFileDialog>


LoadPhotonCount::LoadPhotonCount(QWidget *parent) :
    QDialog(parent)
{
    setupUi(this);
    m_Voltaje=30;
    m_DeltaMinimo=100;
    m_DeltaMaximo=1000000;
    m_Potencial=0;
    Inicializa();
}

void LoadPhotonCount::on_cLocaliza_clicked()
{
    m_FileName=QFileDialog::getOpenFileName(this,"Seleccione el archivo","/home/aaron/Documentos/Datos");
    cFileName->setText(m_FileName);
}

bool LoadPhotonCount::Inicializa()
{
    cVoltaje->setText(QString("%1").arg(m_Voltaje));
    cDeltaMin->setText(QString("%1").arg(m_DeltaMinimo));
    cDeltaMax->setText(QString("%1").arg(m_DeltaMaximo));
    cPotencial->setText(QString("%1").arg(m_Potencial));
    cFileName->setText(m_FileName);
    return true;
}

bool LoadPhotonCount::Validacion()
{
    bool status;
    m_Voltaje=cVoltaje->text().toInt(&status);
    if (!m_Voltaje>0||!status)
        return false;

    m_DeltaMinimo=cDeltaMin->text().toInt(&status);
    if (!m_DeltaMinimo>0||!status)
        return false;

    m_DeltaMaximo=cDeltaMax->text().toInt(&status);
    if (!m_DeltaMaximo>0||!status)
        return false;

    m_Potencial=cPotencial->text().toInt(&status);
    if (!m_DeltaMaximo>0||!status)
        return false;

    m_FileName=cFileName->text();
    QFile Archivo(m_FileName);

    return Archivo.exists();

    Archivo.close();

    return true;
}

void LoadPhotonCount::on_buttonBox_accepted()
{
    QMessageBox::information(NULL, "Adios","Adios");
}



void LoadPhotonCount::on_buttonBox_clicked(QAbstractButton *button)
{
    QDialogButtonBox::ButtonRole Rol;
    Rol=buttonBox->buttonRole(button);
    if (Rol==QDialogButtonBox::AcceptRole)
    {
        if (!Validacion())
        {
            QMessageBox::critical(this,
                                  "Error en carga",
                                  "Los datos introducidos son erroneos");
        }
        else
        {
            Procesa();
            accepted();
        }
    }
    else
    {
        rejected();
    }
}

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>

void LoadPhotonCount::Procesa()
{
    QSqlDatabase Db=QSqlDatabase::database();
    bool Safe=Db.transaction();
    bool status;
    if (!Safe)
        return;
    QString Orden,Formato;
    Formato=tr("insert into corridas (Voltaje,DeltaMinimo,DeltaMaximo,Potencial)"
            "values ('%1','%2','%3','%4')");
    Orden=QString(Formato).arg(m_Voltaje).arg(m_DeltaMinimo).arg(m_DeltaMaximo).arg(m_Potencial);
    QSqlQuery Query;
    status=Query.exec(Orden);
    if (!status)
    {
        Db.rollback();
        return;
    }
    int Registro=Query.lastInsertId().toInt(&status);
    Formato=tr("insert into datoscorridas (id_datoscorridas,id,id_tiempo,Delta)"
            "values (%1,%2,%3,%4)");
    QFile *Archivo=new QFile(m_FileName);
    Archivo->open(QIODevice::ReadOnly);
    QTextStream *Texto=new QTextStream(Archivo);
    QString Fila;
    QStringList Campos;
    double Tiempo=0;
    double Delta;
    int n=0;
    while(!Texto->atEnd())
    {
        Fila=Texto->readLine();
        if (Fila.isEmpty())
                continue;
        n++;
        Campos=Fila.split(",");
        QString l_Delta=Campos.at(0);
        Delta=l_Delta.toDouble(&status);
        Tiempo+=Delta;
        Orden=QString(Formato).arg(Registro).arg(n).arg(Tiempo).arg(Delta);
        status=Query.exec(Orden);
        if (!status)
        {
            QMessageBox::critical(this,
                                  "Error al insertar",
                                  Query.lastError().databaseText());
            Query.clear();
            status=Db.rollback();
            if (!status)
                QMessageBox::critical(this,"Abort",Db.lastError().databaseText());
            return;
        }
    }
    Archivo->close();
    Db.commit();
}
